home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / BARNET / MANUALS / STRONGHELP / DRAWFILE / DrawFile / h / drawfile
Text File  |  1995-01-18  |  15KB  |  553 lines

  1. #ifndef drawfile_H
  2. #define drawfile_H
  3.  
  4. /* C header file for DrawFile
  5.  * written by DefMod (Oct 24 1994) on Tue Jan 17 15:20:45 1995
  6.  * Copyright © Acorn Computers Ltd, 1994
  7.  */
  8.  
  9. #ifndef types_H
  10.    #include "types.h"
  11. #endif
  12.  
  13. #ifndef os_H
  14.    #include "os.h"
  15. #endif
  16.  
  17. #ifndef osspriteop_H
  18.    #include "osspriteop.h"
  19. #endif
  20.  
  21. #ifndef draw_H
  22.    #include "draw.h"
  23. #endif
  24.  
  25. #ifndef font_H
  26.    #include "font.h"
  27. #endif
  28.  
  29. #ifndef wimp_H
  30.    #include "wimp.h"
  31. #endif
  32.  
  33. /**********************************
  34.  * SWI names and SWI reason codes *
  35.  **********************************/
  36. #undef  DrawFile_Render
  37. #define DrawFile_Render                         0x45540
  38. #undef  XDrawFile_Render
  39. #define XDrawFile_Render                        0x65540
  40. #undef  DrawFile_BBox
  41. #define DrawFile_BBox                           0x45541
  42. #undef  XDrawFile_BBox
  43. #define XDrawFile_BBox                          0x65541
  44. #undef  DrawFile_DeclareFonts
  45. #define DrawFile_DeclareFonts                   0x45542
  46. #undef  XDrawFile_DeclareFonts
  47. #define XDrawFile_DeclareFonts                  0x65542
  48. #undef  Service_DrawObjectRender
  49. #define Service_DrawObjectRender                0x45540
  50. #undef  Service_DrawObjectDeclareFonts
  51. #define Service_DrawObjectDeclareFonts          0x45541
  52.  
  53. /************************************
  54.  * Structure and union declarations *
  55.  ************************************/
  56. typedef struct drawfile_font_def                drawfile_font_def;
  57. typedef struct drawfile_text_style              drawfile_text_style;
  58. typedef struct drawfile_path_style              drawfile_path_style;
  59. typedef struct drawfile_font_table              drawfile_font_table;
  60. typedef struct drawfile_text                    drawfile_text;
  61. typedef struct drawfile_path                    drawfile_path;
  62. typedef struct drawfile_path_with_pattern       drawfile_path_with_pattern;
  63. typedef struct drawfile_sprite                  drawfile_sprite;
  64. typedef struct drawfile_group                   drawfile_group;
  65. typedef struct drawfile_tagged                  drawfile_tagged;
  66. typedef struct drawfile_text_column             drawfile_text_column;
  67. typedef struct drawfile_text_column_list        drawfile_text_column_list;
  68. typedef struct drawfile_area_text               drawfile_area_text;
  69. typedef struct drawfile_text_area               drawfile_text_area;
  70. typedef struct drawfile_options                 drawfile_options;
  71. typedef struct drawfile_trfm_text               drawfile_trfm_text;
  72. typedef struct drawfile_trfm_sprite             drawfile_trfm_sprite;
  73. typedef struct drawfile_object                  drawfile_object;
  74. typedef struct drawfile_diagram                 drawfile_diagram;
  75. typedef struct drawfile_render_state            drawfile_render_state;
  76. typedef struct drawfile_declare_fonts_state     drawfile_declare_fonts_state;
  77.  
  78. /********************
  79.  * Type definitions *
  80.  ********************/
  81. struct drawfile_font_def
  82.    {  byte font_index;
  83.       char font_name [UNKNOWN];
  84.    };
  85.  
  86. #define drawfile_FONT_DEF(N) \
  87.    struct \
  88.       {  byte font_index; \
  89.          char font_name [N]; \
  90.       }
  91.  
  92. #define drawfile_SIZEOF_FONT_DEF(N) \
  93.    (offsetof (drawfile_font_def, font_name) + \
  94.          (N)*sizeof ((drawfile_font_def *) NULL)->font_name)
  95.  
  96. struct drawfile_text_style
  97.    {  byte font_index;
  98.       byte reserved [3];
  99.    };
  100.  
  101. struct drawfile_path_style
  102.    {  byte flags;
  103.       byte reserved;
  104.       byte cap_width;
  105.       byte cap_length;
  106.    };
  107.  
  108. struct drawfile_font_table
  109.    {  drawfile_font_def font_def [UNKNOWN];
  110.    };
  111.  
  112. struct drawfile_text
  113.    {  os_box bbox;
  114.       os_colour fill;
  115.       os_colour bg_hint;
  116.       drawfile_text_style style;
  117.       int xsize;
  118.       int ysize;
  119.       os_coord base;
  120.       char text [UNKNOWN];
  121.    };
  122.  
  123. #define drawfile_TEXT(N) \
  124.    struct \
  125.       {  os_box bbox; \
  126.          os_colour fill; \
  127.          os_colour bg_hint; \
  128.          drawfile_text_style style; \
  129.          int xsize; \
  130.          int ysize; \
  131.          os_coord base; \
  132.          char text [N]; \
  133.       }
  134.  
  135. #define drawfile_SIZEOF_TEXT(N) \
  136.    (offsetof (drawfile_text, text) + \
  137.          (N)*sizeof ((drawfile_text *) NULL)->text)
  138.  
  139. struct drawfile_path
  140.    {  os_box bbox;
  141.       os_colour fill;
  142.       os_colour outline;
  143.       int width;
  144.       drawfile_path_style style;
  145.       draw_path path;
  146.    };
  147.  
  148. struct drawfile_path_with_pattern
  149.    {  os_box bbox;
  150.       os_colour fill;
  151.       os_colour outline;
  152.       int width;
  153.       drawfile_path_style style;
  154.       draw_dash_pattern pattern;
  155.       draw_path path;
  156.    };
  157.  
  158. struct drawfile_sprite
  159.    {  os_box bbox;
  160.       osspriteop_header header;
  161.       byte data [UNKNOWN];
  162.    };
  163.  
  164. #define drawfile_SPRITE(N) \
  165.    struct \
  166.       {  os_box bbox; \
  167.          osspriteop_header header; \
  168.          byte data [N]; \
  169.       }
  170.  
  171. #define drawfile_SIZEOF_SPRITE(N) \
  172.    (offsetof (drawfile_sprite, data) + \
  173.          (N)*sizeof ((drawfile_sprite *) NULL)->data)
  174.  
  175. struct drawfile_group
  176.    {  os_box bbox;
  177.       char name [12];
  178.       int objects [UNKNOWN];
  179.    };
  180.  
  181. #define drawfile_GROUP(N) \
  182.    struct \
  183.       {  os_box bbox; \
  184.          char name [12]; \
  185.          int objects [N]; \
  186.       }
  187.  
  188. #define drawfile_SIZEOF_GROUP(N) \
  189.    (offsetof (drawfile_group, objects) + \
  190.          (N)*sizeof ((drawfile_group *) NULL)->objects)
  191.  
  192. struct drawfile_tagged
  193.    {  os_box bbox;
  194.       int tag;
  195.       int object [UNKNOWN];
  196.    };
  197.  
  198. #define drawfile_TAGGED(N) \
  199.    struct \
  200.       {  os_box bbox; \
  201.          int tag; \
  202.          int object [N]; \
  203.       }
  204.  
  205. #define drawfile_SIZEOF_TAGGED(N) \
  206.    (offsetof (drawfile_tagged, object) + \
  207.          (N)*sizeof ((drawfile_tagged *) NULL)->object)
  208.  
  209. struct drawfile_text_column
  210.    {  os_box box;
  211.    };
  212.  
  213. struct drawfile_text_column_list
  214.    {  struct
  215.       {  int type;
  216.          int size;
  217.          drawfile_text_column data;
  218.       }
  219.       columns [UNKNOWN];
  220.    };
  221.  
  222. #define drawfile_TEXT_COLUMN_LIST(N) \
  223.    struct \
  224.       {  struct \
  225.          {  int type; \
  226.             int size; \
  227.             drawfile_text_column data; \
  228.          } \
  229.          columns [N]; \
  230.       }
  231.  
  232. #define drawfile_SIZEOF_TEXT_COLUMN_LIST(N) \
  233.    ((N)*sizeof ((drawfile_text_column_list *) NULL)->columns)
  234.  
  235. struct drawfile_area_text
  236.    {  int type;
  237.       int reserved [2];
  238.       os_colour fill;
  239.       os_colour bg_hint;
  240.       char text [UNKNOWN];
  241.    };
  242.  
  243. #define drawfile_AREA_TEXT(N) \
  244.    struct \
  245.       {  int type; \
  246.          int reserved [2]; \
  247.          os_colour fill; \
  248.          os_colour bg_hint; \
  249.          char text [N]; \
  250.       }
  251.  
  252. #define drawfile_SIZEOF_AREA_TEXT(N) \
  253.    (offsetof (drawfile_area_text, text) + \
  254.          (N)*sizeof ((drawfile_area_text *) NULL)->text)
  255.  
  256. struct drawfile_text_area
  257.    {  os_box bbox;
  258.       drawfile_text_column_list header;
  259.       drawfile_area_text area_text;
  260.    };
  261.  
  262. struct drawfile_options
  263.    {  os_box bbox;
  264.       int paper_size;
  265.       bits paper_options;
  266.       float grid_spacing;
  267.       int grid_division;
  268.       bool isometric;
  269.       bool auto_adjust;
  270.       bool show;
  271.       bool lock;
  272.       bool cm;
  273.       int zoom_mul;
  274.       int zoom_div;
  275.       bool zoom_lock;
  276.       bool toolbox;
  277.       bits entry_mode;
  278.       int undo_size;
  279.    };
  280.  
  281. struct drawfile_trfm_text
  282.    {  os_box bbox;
  283.       os_trfm trfm;
  284.       bits flags;
  285.       os_colour fill;
  286.       os_colour bg_hint;
  287.       drawfile_text_style style;
  288.       int xsize;
  289.       int ysize;
  290.       os_coord base;
  291.       char text [UNKNOWN];
  292.    };
  293.  
  294. #define drawfile_TRFM_TEXT(N) \
  295.    struct \
  296.       {  os_box bbox; \
  297.          os_trfm trfm; \
  298.          bits flags; \
  299.          os_colour fill; \
  300.          os_colour bg_hint; \
  301.          drawfile_text_style style; \
  302.          int xsize; \
  303.          int ysize; \
  304.          os_coord base; \
  305.          char text [N]; \
  306.       }
  307.  
  308. #define drawfile_SIZEOF_TRFM_TEXT(N) \
  309.    (offsetof (drawfile_trfm_text, text) + \
  310.          (N)*sizeof ((drawfile_trfm_text *) NULL)->text)
  311.  
  312. struct drawfile_trfm_sprite
  313.    {  os_box bbox;
  314.       os_trfm trfm;
  315.       osspriteop_header header;
  316.       byte data [UNKNOWN];
  317.    };
  318.  
  319. #define drawfile_TRFM_SPRITE(N) \
  320.    struct \
  321.       {  os_box bbox; \
  322.          os_trfm trfm; \
  323.          osspriteop_header header; \
  324.          byte data [N]; \
  325.       }
  326.  
  327. #define drawfile_SIZEOF_TRFM_SPRITE(N) \
  328.    (offsetof (drawfile_trfm_sprite, data) + \
  329.          (N)*sizeof ((drawfile_trfm_sprite *) NULL)->data)
  330.  
  331. struct drawfile_object
  332.    {  int type;
  333.       int size;
  334.       union
  335.       {  drawfile_font_table font_table;
  336.          drawfile_text text;
  337.          drawfile_path path;
  338.          drawfile_path_with_pattern path_with_pattern;
  339.          drawfile_sprite sprite;
  340.          drawfile_group group;
  341.          drawfile_tagged tagged;
  342.          drawfile_text_column text_column;
  343.          drawfile_text_area text_area;
  344.          drawfile_options options;
  345.          drawfile_trfm_text trfm_text;
  346.          drawfile_trfm_sprite trfm_sprite;
  347.       }
  348.       data;
  349.    };
  350.  
  351. struct drawfile_diagram
  352.    {  char tag [4];
  353.       int major_version;
  354.       int minor_version;
  355.       char source [12];
  356.       os_box bbox;
  357.       drawfile_object objects [UNKNOWN];
  358.    };
  359.  
  360. struct drawfile_render_state
  361.    {  drawfile_object *object;
  362.       drawfile_diagram *diagram;
  363.       drawfile_object *font_table;
  364.       bits flags;
  365.       os_trfm *trfm;
  366.       os_box *clip;
  367.       int flatness;
  368.       os_error *error;
  369.    };
  370.  
  371. struct drawfile_declare_fonts_state
  372.    {  drawfile_object *object;
  373.       drawfile_diagram *diagram;
  374.       drawfile_object *font_table;
  375.       bits flags;
  376.       os_error *error;
  377.    };
  378.  
  379. /************************
  380.  * Constant definitions *
  381.  ************************/
  382. #define error_DRAW_FILE_NOT_DRAW                0x20C00u
  383. #define error_DRAW_FILE_VERSION                 0x20C01u
  384. #define error_DRAW_FILE_FONT_TAB                0x20C02u
  385. #define error_DRAW_FILE_BAD_FONT_NO             0x20C03u
  386. #define error_DRAW_FILE_BAD_MODE                0x20C04u
  387. #define error_DRAW_FILE_BAD_FILE                0x20C05u
  388. #define error_DRAW_FILE_BAD_GROUP               0x20C06u
  389. #define error_DRAW_FILE_BAD_TAG                 0x20C07u
  390. #define error_DRAW_FILE_SYNTAX                  0x20C08u
  391. #define error_DRAW_FILE_FONT_NO                 0x20C09u
  392. #define error_DRAW_FILE_AREA_VER                0x20C0Au
  393. #define error_DRAW_FILE_NO_AREA_VER             0x20C0Bu
  394. #define drawfile_TYPE_FONT_TABLE                0
  395. #define drawfile_TYPE_TEXT                      1
  396. #define drawfile_TYPE_PATH                      2
  397. #define drawfile_TYPE_SPRITE                    5
  398. #define drawfile_TYPE_GROUP                     6
  399. #define drawfile_TYPE_TAGGED                    7
  400. #define drawfile_TYPE_TEXT_AREA                 9
  401. #define drawfile_TYPE_TEXT_COLUMN               10
  402. #define drawfile_TYPE_OPTIONS                   11
  403. #define drawfile_TYPE_TRFM_TEXT                 12
  404. #define drawfile_TYPE_TRFM_SPRITE               13
  405. #define drawfile_TYPE_JPEG                      16
  406. #define drawfile_PATH_MITRED                    0x0u
  407. #define drawfile_PATH_ROUND                     0x1u
  408. #define drawfile_PATH_BEVELLED                  0x2u
  409. #define drawfile_PATH_BUTT                      0x0u
  410. #define drawfile_PATH_SQUARE                    0x2u
  411. #define drawfile_PATH_TRIANGLE                  0x3u
  412. #define drawfile_PATH_JOIN_SHIFT                0
  413. #define drawfile_PATH_JOIN                      0x3u
  414. #define drawfile_PATH_END_SHIFT                 2
  415. #define drawfile_PATH_END                       0xCu
  416. #define drawfile_PATH_START_SHIFT               4
  417. #define drawfile_PATH_START                     0x30u
  418. #define drawfile_PATH_WINDING_EVEN_ODD          0x40u
  419. #define drawfile_PATH_DASHED                    0x80u
  420. #define drawfile_PATH_CAP_WIDTH_SHIFT           16
  421. #define drawfile_PATH_CAP_WIDTH                 0xFF0000u
  422. #define drawfile_PATH_CAP_LENGTH_SHIFT          24
  423. #define drawfile_PATH_CAP_LENGTH                0xFF000000u
  424. #define drawfile_TEXT_KERN                      0x1u
  425. #define drawfile_TEXT_RIGHT_TO_LEFT             0x2u
  426. #define drawfile_TEXT_UNDERLINE                 0x4u
  427. #define drawfile_RENDER_BBOXES                  0x1u
  428. #define drawfile_RENDER_SUPPRESS                0x2u
  429. #define drawfile_RENDER_GIVEN_FLATNESS          0x4u
  430. #define drawfile_NO_DOWNLOAD                    0x1u
  431.  
  432. /*************************
  433.  * Function declarations *
  434.  *************************/
  435.  
  436. #ifdef __cplusplus
  437.    extern "C" {
  438. #endif
  439.  
  440. /* ------------------------------------------------------------------------
  441.  * Function:      drawfile_render()
  442.  *
  443.  * Description:   Calls SWI 0x45540
  444.  *
  445.  * Input:         flags - value of R0 on entry
  446.  *                diagram - value of R1 on entry
  447.  *                size - value of R2 on entry
  448.  *                trfm - value of R3 on entry
  449.  *                clip - value of R4 on entry
  450.  *                flatness - value of R5 on entry
  451.  */
  452.  
  453. extern os_error *xdrawfile_render (bits flags,
  454.       drawfile_diagram *diagram,
  455.       int size,
  456.       os_trfm *trfm,
  457.       os_box *clip,
  458.       int flatness);
  459. extern void drawfile_render (bits flags,
  460.       drawfile_diagram *diagram,
  461.       int size,
  462.       os_trfm *trfm,
  463.       os_box *clip,
  464.       int flatness);
  465.  
  466. /* ------------------------------------------------------------------------
  467.  * Function:      drawfile_bbox()
  468.  *
  469.  * Description:   Calls SWI 0x45541
  470.  *
  471.  * Input:         flags - value of R0 on entry
  472.  *                diagram - value of R1 on entry
  473.  *                size - value of R2 on entry
  474.  *                trfm - value of R3 on entry
  475.  *                bbox - value of R4 on entry
  476.  */
  477.  
  478. extern os_error *xdrawfile_bbox (bits flags,
  479.       drawfile_diagram *diagram,
  480.       int size,
  481.       os_trfm *trfm,
  482.       os_box *bbox);
  483. extern void drawfile_bbox (bits flags,
  484.       drawfile_diagram *diagram,
  485.       int size,
  486.       os_trfm *trfm,
  487.       os_box *bbox);
  488.  
  489. /* ------------------------------------------------------------------------
  490.  * Function:      drawfile_declare_fonts()
  491.  *
  492.  * Description:   Calls SWI 0x45542
  493.  *
  494.  * Input:         flags - value of R0 on entry
  495.  *                diagram - value of R1 on entry
  496.  *                size - value of R2 on entry
  497.  */
  498.  
  499. extern os_error *xdrawfile_declare_fonts (bits flags,
  500.       drawfile_diagram *diagram,
  501.       int size);
  502. extern void drawfile_declare_fonts (bits flags,
  503.       drawfile_diagram *diagram,
  504.       int size);
  505.  
  506. /* ------------------------------------------------------------------------
  507.  * Function:      service_draw_object_render()
  508.  *
  509.  * Description:   Render unknown Draw object in Draw file
  510.  *
  511.  * Input:         type - value of R0 on entry
  512.  *                state - value of R2 on entry
  513.  *
  514.  * Output:        unclaimed - value of R1 on exit (X version only)
  515.  *
  516.  * Returns:       R1 (non-X version only)
  517.  *
  518.  * Other notes:   Calls SWI 0x30 with R1 = 0x45540.
  519.  */
  520.  
  521. extern os_error *xservice_draw_object_render (int type,
  522.       drawfile_render_state *state,
  523.       bool *unclaimed);
  524. extern bool service_draw_object_render (int type,
  525.       drawfile_render_state *state);
  526.  
  527. /* ------------------------------------------------------------------------
  528.  * Function:      service_draw_object_declare_fonts()
  529.  *
  530.  * Description:   Declare fonts for unknown Draw object in Draw file
  531.  *
  532.  * Input:         type - value of R0 on entry
  533.  *                state - value of R2 on entry
  534.  *
  535.  * Output:        unclaimed - value of R1 on exit (X version only)
  536.  *
  537.  * Returns:       R1 (non-X version only)
  538.  *
  539.  * Other notes:   Calls SWI 0x30 with R1 = 0x45541.
  540.  */
  541.  
  542. extern os_error *xservice_draw_object_declare_fonts (int type,
  543.       drawfile_declare_fonts_state *state,
  544.       bool *unclaimed);
  545. extern bool service_draw_object_declare_fonts (int type,
  546.       drawfile_declare_fonts_state *state);
  547.  
  548. #ifdef __cplusplus
  549.    }
  550. #endif
  551.  
  552. #endif
  553.